package com.threadmethod.productdata;

/**
 * @PackageName:com.threadmethod.productdata
 * @ClassName:ValueOP
 * @Description: 定义操作数据的类
 * @Author: zhangxiaoyu
 * @date 2021/1/18 13:49
 */
public class ValueOP {

    private  String value = "";

    public void  setValue(){
        //如果value值不是“”就等待
        synchronized (this){
            while (!value.equalsIgnoreCase("")){
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            
            //如果是“” 设置value字段的值
            String value = System.currentTimeMillis()+"-"+System.nanoTime();
            System.out.println("set设置的值是："+value);
            this.value = value;
            this.notifyAll();
            //在多生产多消费中 notify 不能保证生产者唤醒消费者，如果生产者唤醒的还是生产者可能会出现假死的情况
        }
    }

    //读取字段值
    public void getValue(){
        synchronized (this){
            //如果是“” 就等待
            while (value.equalsIgnoreCase("")){
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            
            //不是“” 读取值
            System.out.println("get的值是："+this.value);
            this.value = "";
            this.notifyAll();
        }
    }
}
